package org.example.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Objects;

/**
 * @Author: Ran
 * @Date: 2021/9/22
 **/
public class StrategyEnumUtils {
    /**
     * 策略枚举 使用code 反推 策略cnName
     *
     * @param <T>  class
     * @param clz  clz
     * @param code code 码
     * @return 策略枚举
     */
    public static <T> String getCnNameByEnumCode(Class<T> clz, int code) {
        if (Objects.isNull(clz)) {
            return null;
        }
        if (!clz.isEnum()) {
            return null;
        }
        try {
            Method clzMethod = clz.getMethod("values");
            T[] ts = (T[]) clzMethod.invoke(clz);
            for (T t : ts) {
                Field codeField = t.getClass().getField("code");

                if (codeField.getInt(t) == code) {
                    return (String)t.getClass().getField("cnName").get(t);
                }
            }
        } catch (Exception ignored) {
        }
        return null;
    }

}
